package com.example;

import java.util.HashSet;
import java.util.Set;

/**
 * @Author loubobooo
 * @Description #41. 缺失的第一个正数
 * @Date 2022/02/24
 */
public class FirstMissingPositive {

    /**
     * 方法描述:给你一个未排序的整数数组 nums ，请你找出其中没有出现的最小的正整数。
     * 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
     * <p>
     * 示例 1：
     * <p>
     * 输入：nums = [1,2,0]
     * 输出：3
     * <p>
     * 所有出现的数字，hash 值 + 1。第二次从 1 开始查找 hash 表，找不到就是它了。
     *
     * @param: [nums]
     * @return: int
     * @author: loubobooo
     * @date: 2022/2/25
     */
    public int firstMissingPositive(int[] nums) {
        Set<Integer> set = new HashSet<>(nums.length);
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }
        // 最小正整数是1，当hash中存在就+1，不存在就直接返回1
        int i = 1;
        while (set.contains(i)) {
            i++;
        }
        return i;
    }

}
